Qt中的QDrag类提供了MIME数据支持的拖放事件,使用拖放事件,用户可以更直观的移动和改变想在应用程序中使用的数据。无论是在桌面环境下还是平板电脑或其它设备中,使用拖放都可以使程序更加的方便和人性化。为了保证使用的数据可以在事件完成后被清理,QDrag事件需要实现在以QWidget为父类的元素上。本文以一个Demo实现了最常用的文件/文本拖放到应用程序的示例。
开启拖放事件
和触摸等大多不常用的事件一样,拖放事件在默认情况下也是不会激活的,要使用拖放事件需要在被拖放元素的构造方法中开启拖放事件:
实现拖放事件
为MainWindow开启了拖放事件后,可以通过覆盖拖放事件的响应函数来实现具体的功能。在本例中需要重写 dragEnterEvent 和 dropEvent :
在dragEnterEvent中判断如果当前mime类型为文本或者url(本地文件是以url类型描述的),则调用acceptProposedAction来设置对应的事件发生flag——只有设置了这个flag,后面的drop事件才会发生。如果要捕获所有类型的拖放事件则可以直接调用acceptProposedAction。
在dropEvent中,我们判断mime的类型然后触发对应的操作,本例中我们将文件的路径或文本内容加入到一个listWidget中: